package intfns

import (
	
	

	
)

func number( tree.Ctx,  ...tree.Result) (tree.Result, error) {
	if ,  := [0].(tree.IsNum);  {
		return .Num(), nil
	}

	return nil, fmt.Errorf("Cannot convert object to a number")
}

func sum( tree.Ctx,  ...tree.Result) (tree.Result, error) {
	,  := [0].(tree.NodeSet)
	if ! {
		return nil, fmt.Errorf("Cannot convert object to a node-set")
	}

	 := 0.0
	for ,  := range  {
		 += float64(tree.GetNodeNum())
	}

	return tree.Num(), nil
}

func floor( tree.Ctx,  ...tree.Result) (tree.Result, error) {
	,  := [0].(tree.IsNum)
	if ! {
		return nil, fmt.Errorf("Cannot convert object to a number")
	}

	return tree.Num(math.Floor(float64(.Num()))), nil
}

func ceiling( tree.Ctx,  ...tree.Result) (tree.Result, error) {
	,  := [0].(tree.IsNum)
	if ! {
		return nil, fmt.Errorf("Cannot convert object to a number")
	}

	return tree.Num(math.Ceil(float64(.Num()))), nil
}

func round( tree.Ctx,  ...tree.Result) (tree.Result, error) {
	,  := [0].(tree.IsNum)
	if ! {
		return nil, fmt.Errorf("Cannot convert object to a number")
	}

	 := .Num()

	if math.IsNaN(float64()) || math.IsInf(float64(), 0) {
		return , nil
	}

	if  < -0.5 {
		 = tree.Num(int( - 0.5))
	} else if  > 0.5 {
		 = tree.Num(int( + 0.5))
	} else {
		 = 0
	}

	return , nil
}